package top.ochiamalu.aioj.strategy.judge;

import top.ochiamalu.aioj.domain.bo.ExecuteMessage;
import top.ochiamalu.aioj.domain.entity.TestCase;

import java.io.File;
import java.util.List;

/**
 * 代码执行器接口
 *
 * @author ochiamalu
 * @date 2025/06/20
 */
public interface CodeExecutor {
    
    /**
     * 将代码保存到文件
     *
     * @param code 代码内容
     * @return 代码文件
     */
    File saveCodeToFile(String code);
    
    /**
     * 编译代码文件
     *
     * @param userCodeFile 用户代码文件
     * @return 编译结果消息
     */
    ExecuteMessage compileFile(File userCodeFile);
    
    /**
     * 运行代码文件
     *
     * @param userCodeFile 用户代码文件
     * @param testCaseList 测试用例列表
     * @return 执行结果消息列表
     */
    List<ExecuteMessage> runFile(File userCodeFile, List<TestCase> testCaseList);
    
    /**
     * 删除文件
     *
     * @param userCodeFile 用户代码文件
     * @return 删除结果
     */
    boolean deleteFile(File userCodeFile);
    
    /**
     * 处理错误消息
     *
     * @param userCodeFile 用户代码文件
     * @param errorMessage 原始错误消息
     * @return 处理后的错误消息
     */
    String handleErrorMessage(File userCodeFile, String errorMessage);
    
    /**
     * 获取该语言的编译器名称
     *
     * @return 编译器名称
     */
    String getCompilerName();
} 